home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / DATABASE / OBJ1_2.ZIP;1 / C_ABROWS.PRG < prev    next >
Encoding:
Text File  |  1993-01-21  |  4.1 KB  |  128 lines

  1. //*****************************************************************************
  2. // C_ABrows.prg
  3. // Array_Browse class for OBJECT v2.03
  4. // Copyright (c) 1991, JHK, JHK-Software, Piestany
  5. // Please compile with: /N/M/W/A
  6. //-----------------------------------------------------------------------------
  7.  
  8. #include "Object.ch"
  9.  
  10. create class ABrowse from Browse
  11.   export:
  12.   var N           // 1                    //index into ABrowse:Arr[N,i]
  13.   var Arr         // {}                   //array for ABrowse
  14.   method New=ABrowseNew                   //o:New()
  15.   method Init=ABrowseInit                 //o:Init(Name,R,C,Rs,Cs,Clr,Shadow)
  16.   method GoodInit=ABrowseGoodInit         //o:GoodInit(Name,R,C,Rs,Cs,CurSize,Clr,Shadow)
  17.   method Paint=ABrowsePaint               //o:Paint(IsTop)
  18.   endclass
  19.  
  20.  
  21. //*****************************************************************************
  22. // ABrowse:New() --> self
  23. // initialize new object
  24. //
  25. constructor ABrowseNew()
  26.   ::N:= 1
  27.   ::Arr:= {}
  28.   ::CanSwap:= false               //override
  29.   ::InsBlock:= {|o|DoInsert(o)}   //override
  30.   ::DelBlock:= {|o|DoDelete(o)}   //override
  31.   return(self)
  32.  
  33.  
  34. //*****************************************************************************
  35. // ABrowse:Init(Name,R,C,Rs,Cs,Clr,Shadow) --> true
  36. // initialize new view object
  37. //
  38. method function ABrowseInit(Name,R,C,Rs,Cs,Clr,Shadow)
  39.   ::super(Browse):Init(Name,R,C,Rs,Cs,Clr,Shadow)
  40.   return(EndInit(self))
  41.  
  42.  
  43. //*****************************************************************************
  44. // ABrowse:GoodInit(Name,R,C,Rs,Cs,CurSize,Clr,Shadow) --> true
  45. // initialize new view object
  46. //
  47. method function ABrowseGoodInit(Name,R,C,Rs,Cs,CurSize,Clr,Shadow)
  48.   ::super(Browse):GoodInit(Name,R,C,Rs,Cs,CurSize,Clr,Shadow)
  49.   return(EndInit(self))
  50.  
  51.  
  52. //-----------------------------------------------------------------------------
  53. // ABrowse::EndInit() --> true
  54. // initialize ABrowse extension intances
  55. //
  56. static function EndInit(ABrowse)
  57.   ABrowse:Tb:SkipBlock:={|n|ASkipper(n,ABrowse)}
  58.   ABrowse:Tb:SkipBlock:={|x,k,n,l|;
  59.                           n:=ABrowse:N,;
  60.                           l:=Len(ABrowse:Arr),;
  61.                           k:=if(abs(x)>=if(x>=0,l-n,n-1),if(x>=0,l-n,1-n),x),;
  62.                           ABrowse:N+=k,;
  63.                           k;
  64.                         }
  65.   ABrowse:Tb:GoTopBlock:={||ABrowse:N:=1}
  66.   ABrowse:Tb:GoBottomBlock:={||ABrowse:N:=Len(ABrowse:Arr)}
  67.   return(true)
  68.  
  69.  
  70. //-----------------------------------------------------------------------------
  71. // ABrowse::ASkipper(x,ABrowse) --> nSkipped
  72. // array skipper function.
  73. // x == request for skip
  74. // ABrowse == self object
  75. //
  76. static function ASkipper(x,ABrowse)
  77.   local k,n,l
  78.   if Eval(ABrowse:PreSkip,ABrowse)
  79.     n:=ABrowse:N
  80.     l:=Len(ABrowse:Arr)
  81.     k:=if(abs(x)>=if(x>=0,l-n,n-1),if(x>=0,l-n,1-n),x)
  82.     ABrowse:N+=k
  83.     Eval(ABrowse:PostSkip,ABrowse)
  84.   endif
  85.   return(k)
  86.  
  87.  
  88. //-----------------------------------------------------------------------------
  89. // ABrowse::DoInsert() --> true
  90. // insert new row into array
  91. //
  92. static function DoInsert(ABrowse)
  93.   if Alert(ResTxt(104),ResTxt(123))==1
  94.     ATrueIns(ABrowse:Arr,ABrowse:N,if(ValType(ABrowse:Arr[ABrowse:N])=="A",;
  95.                                       AClone(ABrowse:Arr[ABrowse:N]),;
  96.                                       ABrowse:Arr[ABrowse:N]))
  97.     ABrowse:Tb:RefreshAll()
  98.   endif
  99.   return(true)
  100.  
  101.  
  102. //-----------------------------------------------------------------------------
  103. // ABrowse::DoDelete() --> true
  104. // delete current row from array
  105. //
  106. static function DoDelete(ABrowse)
  107.   if Alert(ResTxt(105),ResTxt(123))==1
  108.     ATrueDel(ABrowse:Arr,ABrowse:N)
  109.     ABrowse:Tb:RefreshAll()
  110.   endif
  111.   return(true)
  112.  
  113.  
  114. //*****************************************************************************
  115. // ABrowse:Paint(isTop) --> true
  116. // before ::Paint() must be done ::PostInit().
  117. //
  118. method function ABrowsePaint(isTop)
  119.   if !::SetUp; ::PostInit(); endif
  120.   if !Empty(::PreSkip)
  121.     ::Tb:SkipBlock:={|n|ASkipper(n,self)}
  122.   endif
  123.   return(::super(Browse):Paint(isTop))
  124.  
  125.  
  126. //------------------------------------------------------- eof (c)JHK ----------
  127.  
  128.